feat(unstable): support TC39 import defer proposal#32360
Merged
bartlomieju merged 12 commits intodenoland:mainfrom Apr 29, 2026
Merged
feat(unstable): support TC39 import defer proposal#32360bartlomieju merged 12 commits intodenoland:mainfrom
bartlomieju merged 12 commits intodenoland:mainfrom
Conversation
Adds support for the TC39 "Deferred Module Evaluation" proposal (https://github.com/tc39/proposal-defer-import-eval, Stage 3). Changes: - Enable V8 `--js-defer-import-eval` flag for parser/runtime support - Separate `ModuleImportPhase::Defer` handling from `Evaluation` phase: deferred modules are instantiated but not evaluated, letting V8 create a deferred namespace that triggers evaluation on first property access - Add integration test validating deferred evaluation semantics Ported from denoland/deno_core#1280 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 tasks
devsnek
approved these changes
Mar 3, 2026
Member
Author
|
Waiting on v8/v8@f2016e1 in V8 14.7. |
This was referenced Apr 19, 2026
Merged
Upgrade rusty_v8 to 147.3.0 which includes the Module::EvaluateForImportDefer and GetModuleNamespace with phase APIs needed for dynamic import.defer() support. Fix merge conflict in map.rs: restore separate Defer arm in dynamic import handling (must NOT call dynamic_import_module_evaluate since defer imports should not be evaluated until namespace access). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Point to local deno_graph (with ImportDefer variants) and deno_doc. Add ImportDefer handling to unfurl.rs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use the new V8 Module::evaluate_for_import_defer API for dynamic import.defer() to properly gather async transitive dependencies before resolving. Get the deferred namespace via get_module_namespace_with_phase (kDefer) so V8 creates a namespace that triggers evaluation on first property access. Handles three promise states: - Fulfilled: all async deps ready, resolve immediately with deferred ns - Rejected: propagate error to dynamic import reject - Pending: store for later resolution via pending_dyn_mod_evaluations Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Filter TS18060 diagnostic ("Deferred imports are only supported when
module is esnext or preserve") since Deno handles module resolution
natively and supports import defer.
- Add test for running import defer from TypeScript files.
- Add test for type-checking import defer TypeScript files.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace local path overrides with published crate versions that include import defer support. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…o feat/import-defer-eval
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This commit adds an experimental support for
import defer ...syntax,for https://github.com/tc39/proposal-defer-import-eval proposal.
Closes #30053